/**
 * module index
 */
(function() {
	'use strict';

	require.config({
		baseUrl: "/miwawa/resources/lib",
		paths: {
			"config": "miwawa/1.0.2/js/core/requirejs/config"
		},
		wrapShim: true,
		waitSeconds: 0
	});
	
	require(['config'], function(){
		require(['jquery','jquery.bootstrap','jquery.plugin.nicescroll','jquery.plugin.amaranjs'], function(jQuery){
			InitiateScrolled();
			InitiateAjaxLoad();
			InitiateSideMenu();
			InitiateWebsocks();
			InitiateDialoger();
			
			require(['domReady'], function (domReady) {
			    domReady(function () {
					jQuery('[data-toggle="ajaxload"]:eq(0)').click();
			    });
			});
		});
	});
	
	function InitiateDialoger(){
		var common_opts,extension_opts;
		
		// 主窗口
		jQuery("#common-modal").on("show.bs.modal",function(event){
			event.preventDefault;
			
			common_opts = jQuery(event.relatedTarget).data();
			if(common_opts.url){
				jQuery(".modal-content","#common-modal").load(common_opts.url,function(){
					if(common_opts.onshow) window[common_opts.onshow](event);
				});
			}
		}).on("shown.bs.modal",function(event){
			event.preventDefault;
			
			if(common_opts.onshown) window[common_opts.onshown](event);
		}).on("hidden.bs.modal",function(event){
			event.preventDefault;
			
			if(common_opts.onhidden) window[common_opts.onhidden](event);
		});
		
		// 子窗口
		jQuery("#extension-modal").on("show.bs.modal",function(event){
			event.preventDefault;
			
			extension_opts = jQuery(event.currentTarget).data();
			
			if(extension_opts.url){
				jQuery(".modal-content","#extension-modal").load(extension_opts.url, function(){
					if(extension_opts.onshow) typeof extension_opts.onshow == "function" ? extension_opts.onshow() : window[extension_opts.onshow](event);
				});
			}
		}).on("shown.bs.modal",function(event){
			event.preventDefault;
			
			if(extension_opts.onshown) typeof extension_opts.onshown == "function" ? extension_opts.onshown() : window[extension_opts.onshown](event);
		}).on("hidden.bs.modal",function(event){
			event.preventDefault;
			
			if(extension_opts.onhidden) typeof extension_opts.onhidden == "function" ? extension_opts.onhidden() : window[extension_opts.onhidden](event);
		});
	}
	
	function InitiateWebsocks(){
		var websocket = null, 
			server = /[^(http|https):\/\/]+[^(\/)]+/gi.exec(window.location.href)[0];
		
		if ('WebSocket' in window || 'MozWebSocket' in window) {
			websocket = new WebSocket("ws://114.215.198.16:18080/miwawa/origin/websocket/notify");
		} else {
			require(['sockjs'], function(sockjs){
				websocket = new SockJS("http://114.215.198.16:18080/miwawa/sockjs/websocket/notify");
			});
	 	}
		
		websocket.onopen = function(event){
			console.log(event);
		};
		
		websocket.onmessage = function(event) {
            jQuery.message.notify(jQuery.parseJSON(event.data));
        };
	}
	
	function InitiateScrolled(){
		jQuery(".page-body").niceScroll({
			zindex : '2015',
			background : '#424f63',
			cursorcolor : "#65cea7",
			cursorwidth : '6',
			cursorborder : '0',
			spacebarenabled : false
		});
	}
	
	function InitiateAjaxLoad() {
		jQuery('.page-sidebar').delegate('[data-toggle="ajaxload"]',"click",function(event){
			event.preventDefault;
			
			jQuery('<div class="loading-container"><div class="loader"></div></div>').appendTo(".page-body");
			
			var _opts = $(this).data();
			if(_opts.auths){
				jQuery(_opts.target).load(_opts.url+"?auths="+_opts.auths);
			}else{
				jQuery(_opts.target).load(_opts.url);
			}
		});
	}
	
	function InitiateSideMenu() {
		// Sidebar Toggler
		jQuery(".sidebar-toggler").on('click', function() {
			jQuery(".page-sidebar").toggleClass("hide");
			jQuery(".page-footer").toggleClass("hide");
			jQuery(".sidebar-toggler").toggleClass("active");
			return false;
		});

		// Sidebar Collapse
		var compact = jQuery(".page-sidebar").hasClass("menu-compact");
		jQuery(".sidebar-collapse").on('click', function() {
			if (!jQuery('.page-sidebar').is(':visible')){
				jQuery(".page-sidebar").toggleClass("hide");
			}
			jQuery(".page-sidebar").toggleClass("menu-compact");
			jQuery(".page-footer").toggleClass("menu-compact");
			jQuery(".sidebar-collapse").toggleClass("active");
			compact = jQuery(".page-sidebar").hasClass("menu-compact");

			if (jQuery(".sidebar-menu").closest("div").hasClass("slimScrollDiv")) {
				jQuery(".sidebar-menu").slimScroll({destroy : true});
				jQuery(".sidebar-menu").attr('style', '');
			}
			if (compact) {
				jQuery(".open > .submenu").removeClass("open");
			} else {
				if (jQuery('.page-sidebar').hasClass('sidebar-fixed')) {
					// Slim Scroll Handle
					jQuery('.sidebar-menu').slimscroll({
						size : '3px',
						color : "#2dc3e8",
						height : 'auto',
						position : 'left'
					});
				}
			}
		});

		// Sidebar Menu Handle
		jQuery(".sidebar-menu").on('click', function(e) {
			var menuLink = jQuery(e.target).closest("a");
			if (!menuLink || menuLink.length == 0) {
				return;
			}
			if (!menuLink.hasClass("menu-dropdown")) {
				if (compact && menuLink.get(0).parentNode.parentNode == this) {
					var menuText = menuLink.find(".menu-text").get(0);
					if (e.target != menuText && !jQuery.contains(menuText, e.target)) {
						return false;
					}
				}
				return;
			}
			
			var submenu = menuLink.next().get(0);
			if (!jQuery(submenu).is(":visible")) {
				var ul = jQuery(submenu.parentNode).closest("ul");
				if (compact && c.hasClass("sidebar-menu")) return;
				ul.find("> .open > .submenu").each(function() {
					if (this != submenu && !jQuery(this.parentNode).hasClass("active")) {
						jQuery(this).slideUp(200).parent().removeClass("open");
					}
				});
			}
			if (compact && jQuery(submenu.parentNode.parentNode).hasClass("sidebar-menu")) {
				return false;
			}
			jQuery(submenu).slideToggle(200).parent().toggleClass("open");
			return false;
		});
	}
	
})(this);